package super_;

public class B extends A{
    //1.访问父类的属性，但不能访问父类的private属性
    public void hi() {
        System.out.println(super.n1 + " " + super.n2 + " " + super.n3);
    }
//2.访问父类方法，不能访问父类的private方法
    public void ok() {
        super.test100();
        super.test200();
        super.test300();
    }
    //3.访问父类的构造器,只能放在构造器的第一句，只能出现一句
    public  B() {
        //super();
        super("jack", 10);
    }
    //
    public void sum() {
        System.out.println("子类（B）的sum()方法");
        //希望调用父类A的cal方法，因为子类B没有cal方法

        //找cal方法时的顺序是：
        //(1)先找本类，如果有，则调用
        //(2)如果没有，则找父类（如果有，并可以调用，则调用）
        //(3)如果父类也没有，则继续找父类的父类，整个规则，是一样的，直到Obiject类
        //注意：如果查找方法的过程中，找到了，但不能访问，则报错,cannot access
        //     如果查找方法的过程中，没有找到，则提示方法不存在
        //cal();//从本类开始查找
       // this.cal();//从本类开始查找
        super.cal();//从父类开始查找
        System.out.println(n1 + " " + n2);
        System.out.println(this.n1 + " " + this.n2);
        //this和直接访问的效果一样，都是从本类开始查找
    }
    //编写test方法
    public void test() {
        //3.super的访问不限于直接父类，如果爷爷类和本类中有同名的成员，
        // 也可以使用super去访问爷爷类的成员
        //如果多个基类(上一级)中都有同名的成员，使用super访问遵循就近原则
        System.out.println("super.n1" + super.n1);//A-->Base
        //如果查找方法的过程中，找到了，但不能访问，则报错
    }
}
